区切り文字ファイルの列5を最初の5文字に減らす必要があります。他のすべての列は編集されていないままにしてください。
入力する:
file1.txt column1 column2 column3 column4 column5
123456789 123456789 123456789 123456789 123456789
出力が次のようになります。
output.txt column1 column2 column3 column4 column5
123456789 123456789 123456789 123456789 12345
注:私はカンマを区切り文字として使用します。
答え1
file.csv
次の場合:
123456789,123456789,123456789,123456789,123456789
123456789,123456789,123456789,123456789,223456789
123456789,123456789,123456789,123456789,323456789
123456789,123456789,123456789,123456789,423456789
その後、次のことができます。
$ awk -F, '{print $1","$2","$3","$4","substr($5,1,5) }' file.csv
123456789,123456789,123456789,123456789,12345
123456789,123456789,123456789,123456789,22345
123456789,123456789,123456789,123456789,32345
123456789,123456789,123456789,123456789,42345
答え2
すべての値が単純で(値に引用符や改行なし)、コンマで区切られている場合は、次のようになります。
123456789,123456789,123456789,123456789,123456789
常に5つの値が連続している場合は、次のものを使用できますsed
。
sed '2,$s/\(.*\),\(.*\),\(.*\),\(.*\),\(.....\)\(.*\)/\1,\2,\3,\4,\5/' input
2,$
カンマで区切られたヘッダーがあり、5番目の列が切り捨てられてはいけないと仮定し、そうでない場合は無視してください。
答え3
またはawk
:
空間分離の場合:
awk 'NR==1 { print; next} {print $1, $2, $3, $4, substr($5,1,5)}'
カンマで区切られた場合:
awk 'BEGIN {FS=","} NR==1 { print; next} {print $1, $2, $3, $4, substr($5,1,5)}'
少しよいCSVの分割およびGNU awkの仮定のため:
awk -vFPAT='[^,]*|"[^"]*"' 'NR==1 { print; next} {print $1, $2, $3, $4, substr($5,1,5)}'