我有一個包含如下排列和列到行使用AWK
cat file1.txt
a b c
1 2 3
cat file2.txt
a
b
c
1
2
3
我想file1的被佈置爲
a
b
c
1
2
3
和file2到被佈置爲
a b c
1 2 3
兩個文件
我想用awk一行解決方案
我有一個包含如下排列和列到行使用AWK
cat file1.txt
a b c
1 2 3
cat file2.txt
a
b
c
1
2
3
我想file1的被佈置爲
a
b
c
1
2
3
和file2到被佈置爲
a b c
1 2 3
兩個文件
我想用awk一行解決方案
一些awk
版本
awk 1 RS=" |\n" file1 # gnu awk version
awk '{for (i=1;i<=NF;i++) print $i}' file1 # portable version
a
b
c
1
2
3
awk '{printf "%s" (NR%3==0?"RS:FS),$1}' file2
a b c
1 2 3
printf "%s"
#打印pararameter#1($ 1)
NR%3==0?"RS:FS
#添加額外的格式。測試行號是否3.如果不行,則使用FS(空格),如果使用RS,則換行。
所以這調整每3行後的下一個參數。
對於YOUT第一個文件,你可以嘗試像:
awk '{for (i=1 ; i <= NF ; i++) print $i}' file1.txt
爲了您的第二個文件,你可以嘗試像:
awk 'BEGIN {str=""; i=1} {if(i%3 == 0){str=str""$0"\n"} else {str=str""$0" "} i++} END {print str}' file2.txt
不過,我會做出那樣的全一些假設例如,3行需要在輸出中跳過一行。我們需要更多的細節我想......
您不需要'-F「」'因爲它的默認值。 – Jotne
是的,我忘了,我會編輯我的帖子。謝謝:) –
我會使用xargs
此:
$ xargs -n1 < file1
a
b
c
1
2
3
$ xargs -n3 < file2
a b c
1 2 3
我喜歡這個解決方案,因爲它的簡單性。但是正在尋找awk解決方案。 – user2949699
不錯的一個..我之前沒有看到 – ackuser
真的很喜歡這個,我搜索了一段時間來得到這個解決方案,謝謝(+1) – Patric
的簡單設置的OFS或ORS的FS或RS適當打印之前(並重新編譯,如果有必要$1=$1
備案)的慣用awk的方法將與任何awk一起工作:
$ cat file1
a b c
1 2 3
$ awk '{OFS=RS;$1=$1}1' file1
a
b
c
1
2
3
$ cat file2
a
b
c
1
2
3
$ awk '{ORS=(NR%3?FS:RS)}1' file2
a b c
1 2 3
作爲awk的新手,我無法完全理解file2的解決方案。將不勝感激,如果你能解釋它 – user2949699
@jotne不要忘記格式與數據分開的逗號。使用'FS'和'RS'更清晰,並切換順序保存顯式比較'awk'{printf「%s%s」,$ 0,(NR%3?FS:RS)}''。 –
@sudo_O是它的更清潔,沒有想過它。 &user2949699我爲你添加了一些額外的信息,希望它有助於一些。 – Jotne