我有多個行的文件data.csv,上面寫着:如何乘AWK輸出
A
B
C
,我想代碼的輸出要乘以n次:
A
B
C
A
B
C
這裏是一條線,我一直在努力,並返回結果是什麼的一個例子:
awk '{for (i=0; i<3 ;i++){ print $1}}' input.csv
A
A
A
B
B
B
C
C
C
同樣的,貓和其他工具
我有多個行的文件data.csv,上面寫着:如何乘AWK輸出
A
B
C
,我想代碼的輸出要乘以n次:
A
B
C
A
B
C
這裏是一條線,我一直在努力,並返回結果是什麼的一個例子:
awk '{for (i=0; i<3 ;i++){ print $1}}' input.csv
A
A
A
B
B
B
C
C
C
同樣的,貓和其他工具
$ awk -v n=3 'BEGIN{ for (i=1;i<n;i++) {ARGV[ARGC]=ARGV[1]; ARGC++} } 1' file
A
B
C
A
B
C
A
B
C
注意上面只存儲名的文件的n
倍,而不是內容的文件的,所以它會爲任何規模的文件作爲工作它使用的內存可以忽略不計。
這裏是一個單一有效1-襯墊:yes data | head -3 | xargs cat
$ cat data
A
B
C
$ yes data | head -3 | xargs cat
A
B
C
A
B
C
A
B
C
$
head -3
=>這裏3
表示n
的次數。
或使用awk
解決方案:
$ cat data
A
B
C
$ awk 'BEGIN{i=0} {a[i]=$0;i++} END {for(i=0;i<=3;i++) for(j=0;j<=NR;j++) print a[j]}' data | sed '/^$/d'
A
B
C
A
B
C
A
B
C
A
B
C
$
假設你正在寫一個shell腳本,爲什麼用awk?
for i in `seq 3`; do
cat data.csv
done
如果要使用管道進行此操作,例如,用awk,你需要將文件數據存儲在內存中,或者暫時保存到磁盤。例如:
cat data.csv | \
awk '{a = a $0 "\n"} END { for (i=0; i<3 ;i++){ printf "%s",a; }}'
其實你是對的,不用awk做for循環就可以做到這一點,我很好奇是否有辦法,因爲我沒有在其他地方找到它。此外,我是初學者,謝謝你的意見。 –
您可以使用貓和printf
cat $(printf "%0.sfile " {1..3})
試試這個:
seq 2 | xargs -Inone cat input.csv
不錯。我只是看着這樣的'xargs'並試圖弄清楚如何讓它忽略'seq'輸出。 –
可能最短
cat input.csv{,,}
隨着SED按住/模式空間:
在這只是給出的情況單個字母。分別ABC:
如果你想打印一次:
cat temp | sed 's/\(.*\)/\1/;N;N;H'
輸出:
[[email protected] ~]$ cat temp | sed 's/\(.*\)/\1/;N;N;H;G;G'
A
B
C
[[email protected] ~]$
兩次(只是追加一個分號/資本摹TOT他結束):
cat temp | sed 's/\(.*\)/\1/;N;N;H;G'
輸出:
[[email protected] ~]$ cat temp | sed 's/\(.*\)/\1/;N;N;H;G;G'
A
B
C
A
B
C
[[email protected] ~]$
三次(另一個G):
cat temp | sed 's/\(.*\)/\1/;N;N;H;G;G'
輸出:
[[email protected] ~]$ cat temp | sed 's/\(.*\)/\1/;N;N;H;G;G'
A
B
C
A
B
C
A
B
C
[[email protected] ~]$
等。
文件(有文件沒有換行符):
[[email protected] ~]$ cat temp
A
B
C
[[email protected] ~]$
爲什麼不 「貓」 文件的3倍?你需要它來使用管道嗎?你知道內存要求嗎? – LatinSuD
感謝您的回覆!它不需要用貓來完成,我剛剛瞭解了awk,並且很好奇是否有使用它的方法。 –