web-dev-qa-db-ja.com

UNIXの各行の末尾にある文字を削除する方法

ファイルの各行の末尾にあるコンマ,を削除したいです。 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,
55
Teja

Sedを使用できます:

sed 's/,$//' file > file.nocomma

最後の文字を削除するには:

sed 's/.$//' file > file.nolast
53
jlliagre

これを試してみてください:

awk '{print substr($0, 1, length($0)-1)}' file.txt

これは、最後のコンマを削除するだけでなく、最後の文字を削除するよりも一般的です

Awkで最後のコンマのみを削除したい場合:

awk '{gsub(/,$/,""); print}' file.txt
76
Gilles Quenot

awkに基づくRSコード。

awk '1' RS=',\n' file

または:

awk 'BEGIN{RS=",\n"}1' file

この最後の例は、改行の前のany charに対して有効です。

awk '1' RS='.\n' file

ドット.は、改行を除くすべての文字に一致します

説明

awkを使用すると、異なるレコード(行)regex区切り文字を使用できます。改行(またはdotany 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によるレコード分割 および 出力セパレータ

6

同じ仕事をする代替コマンド

tr -d ",$" < infile
awk 'gsub(",$","")' infile
1
SHAILESH PATEL

次の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
0
Chris Koknat