Linux
將單行拆分為多行,輸入文件中的所有行都缺少換行符
我有一種方法可以將單行拆分為多行,包含 3 列。文件中所有行的末尾都缺少新行字元。
我嘗試使用 awk,但它將每一列拆分為一行,而不是每行 3 列。
awk '{ gsub(",", "\n") } 6' filename
where
filename
的內容如下所示:A,B,C,D,E,F,G,H,I,J,K,L,M,N,O
所需的輸出在每行中有 3 列:
A,B,C D,E,F G,H,I J,K,L M,N,O
使用
awk
$ awk -v RS='[,\n]' '{a=$0;getline b; getline c; print a,b,c}' OFS=, filename A,B,C D,E,F G,H,I J,K,L M,N,O
這個怎麼運作
-v RS='[,\n]'
這告訴 awk 使用任何出現的逗號或換行符作為記錄分隔符。
a=$0; getline b; getline c
這告訴 awk 將目前行保存在 variable 中
a
,將下一行保存在 variable 中,並將下一行保存b
在 variable 中c
。
print a,b,c
這告訴 awk 列印
a
,b
, 和c
OFS=,
這告訴 awk 在輸出中使用逗號作為欄位分隔符。
使用
tr
和paste
$ tr , '\n' <filename | paste -d, - - - A,B,C D,E,F G,H,I J,K,L M,N,O
這個怎麼運作
tr , '\n' <filename
這從文件名讀取,同時將所有逗號轉換為換行符。
paste -d, - - -
這
paste
將從標準輸入中讀取三行(每行一個-
)並將它們粘貼在一起,每行用逗號 (-d,
) 分隔。備用 awk
$ awk -v RS='[,\n]' '{printf "%s%s",$0,(NR%3?",":"\n")}' filename A,B,C D,E,F G,H,I J,K,L M,N,O
這個怎麼運作
-v RS='[,\n]'
這告訴 awk 使用任何出現的逗號或換行符作為記錄分隔符。
printf "%s%s",$0,(NR%3?",":"\n")
這告訴 awk 列印目前行,後跟逗號或換行符,具體取決於目前行號的值
NR
,模 3。