ファイルの各行の末尾にあるコンマ,
を削除したいです。 awk
でサブストリング関数を使用する以外に、どうすればよいですか。私に提案してください。ありがとう
サンプル入力
SUPPLIER_PROC_ID BIGINT NOT NULL,
BTCH_NBR INTEGER NOT NULL,
RX_BTCH_SUPPLIER_SEQ_NBR INTEGER NOT NULL,
CORRN_ID INTEGER NOT NULL,
RX_CNT BYTEINT NOT NULL,
DATA_TYP_CD BYTEINT NOT NULL,
DATA_PD_CD BYTEINT NOT NULL,
CYC_DT DATE NOT NULL,
BASE_DT DATE NOT NULL,
DATA_LOAD_DT DATE NOT NULL,
DATA_DT DATE NOT NULL,
SUPPLIER_DATA_SRC_CD BYTEINT NOT NULL,
RX_CHNL_CD BYTEINT NOT NULL,
MP_IMS_ID INTEGER NOT NULL,
MP_LOC_ID NUMERIC(3,0),
MP_IMS_ID_ACTN_CD BYTEINT NOT NULL,
NPI_ID BIGINT,
Sedを使用できます:
sed 's/,$//' file > file.nocomma
最後の文字を削除するには:
sed 's/.$//' file > file.nolast
これを試してみてください:
awk '{print substr($0, 1, length($0)-1)}' file.txt
これは、最後のコンマを削除するだけでなく、最後の文字を削除するよりも一般的です
Awkで最後のコンマのみを削除したい場合:
awk '{gsub(/,$/,""); print}' file.txt
awk
に基づくRS
コード。
awk '1' RS=',\n' file
または:
awk 'BEGIN{RS=",\n"}1' file
この最後の例は、改行の前のany charに対して有効です。
awk '1' RS='.\n' file
注:ドット.
は、改行を除くすべての文字に一致します。
説明
awk
を使用すると、異なるレコード(行)regex
区切り文字を使用できます。改行(またはdot
はany char )input
に使用されるもの、RS
。
注:1
はどういう意味ですか?
短い答え、これはprint
ステートメントの使用を避けるための単なるショートカットです。 awk
では、条件が一致すると、デフォルトのアクションは入力行を出力することです。例:
$ echo "test" |awk '1'
test
これは、1
が常にtrueになるため、この式は次と同等です。
$ echo "test"|awk '1==1'
test
$ echo "test"|awk '{if (1==1){print}}'
test
ドキュメント
チェック標準awkによるレコード分割 および 出力セパレータ 。
同じ仕事をする代替コマンド
tr -d ",$" < infile
awk 'gsub(",$","")' infile
次のPerlコードは、行末のコンマを削除します。
Perl -pe 's/,$//' file > file.nocomma
このバリエーションは、コンマの後に空白がある場合でも機能します。
Perl -lpe 's/,\s*$//' file > file.nocomma
このバリエーションは、ファイルをその場で編集します。
Perl -i -lpe 's/,\s*$//' file
このバリエーションでは、ファイルをその場で編集し、バックアップfile.bak
を作成します。
Perl -i.bak -lpe 's/,\s*$//' file