csvファイルに縮小フィールドを追加する

csvファイルに縮小フィールドを追加する

次のようなコンテンツを含むCSVファイルがあります。

10;12;33;44;55;66;77;88
1;2;3;4;5;6;7;8
110;112;133;144;155;616;771;818
...etc

各行には、数字で区切られた8つの数字があります;

1184 で始まり、下にある各行の先頭に新しいフィールドを追加する必要があるため、最終ファイルは次のようになります。

1184;10;12;33;44;55;66;77;88
1183;1;2;3;4;5;6;7;8
1182;110;112;133;144;155;616;771;818
... etc

awkmacOSで何かを使ってこれを行うにはどうすればよいですか?

ベストアンサー1

awk 'BEGIN { n = 1184 } { printf("%d;%s\n", n--, $0) }' infile >outfile

nまたは、コマンドラインで設定するには、次の手順を実行します。

awk -v n=1184 '{ printf("%d;%s\n", n--, $0) }' infile >outfile

またはprint代わりに使用してくださいprintf

awk -v n=1184 '{ print n-- ";" $0 }' infile >outfile

または、awk新しいフィールドと行の残りの部分の間にフィールド区切り文字を挿入します。

awk -v n=1184 -v OFS=';' '{ print n--, $0 }' infile >outfile

または、最初の;区切りフィールドのみを変更してレコードを印刷します。

awk -F ';' -v n=1184 -v OFS=';' '{ $1 = n-- OFS $1; print }' infile >outfile

これにより、既存の各行の前に変数に格納されている数字が付き、n変数も減少します。その行の既存のデータは変更されずに渡されます。

出力が作成され、outfile質問のサンプルデータが提供されると、次のようになります。

1184;10;12;33;44;55;66;77;88
1183;1;2;3;4;5;6;7;8
1182;110;112;133;144;155;616;771;818

2つのファイル名は異なる必要がinfileありますoutfile。それ以外の場合、入力データファイルは空になり失われます。

おすすめ記事