区切りテキストファイル内の特定の列の長さを短くする

区切りテキストファイル内の特定の列の長さを短くする

区切り文字ファイルの列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)}'

関連情報