2016-05-05 51 views
0

我有多個行的文件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 

同樣的,貓和其他工具

+2

爲什麼不 「貓」 文件的3倍?你需要它來使用管道嗎?你知道內存要求嗎? – LatinSuD

+0

感謝您的回覆!它不需要用貓來完成,我剛剛瞭解了awk,並且很好奇是否有使用它的方法。 –

回答

2
$ 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

'ARGV [ARGC++] = ARGV [1]'會起作用嗎? – 123

+2

這就是我曾經使用過的,直到有人指向我一些基本上顯示你無法保證'ARGC++'在分配前不會發生的文檔。我不記得它是否是POSIX規範,或者是它和它之間的區別,它說服我改變爲在分配後總是明確地放置'ARGC++'。 –

+1

對啊,很高興知道,謝謝! – 123

1

這裏是一個單一有效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 
$ 
2

這會做:

for i in {1..3}; do cat data.csv; done 

它不會管工作,雖然。

感謝您的意見

+0

這種效率不高,因爲它每次都會讓貓感到不適。 – 123

+0

我的意思是內存有效,而不是將整個塊存儲在內存中。感謝您的評論。 – LatinSuD

0
for ((c=1; c<=3; c++)) 
do 
cat Input_file.csv 
done 
+0

對不起,我的壞。我錯了。將很快糾正它。按照要求更正 – monk

+0

,但其他方式更好。 – monk

+0

@ user2809888您要求@monk解釋從1到3循環中調用的'cat'? –

0

假設你正在寫一個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; }}' 
+1

其實你是對的,不用awk做for循環就可以做到這一點,我很好奇是否有辦法,因爲我沒有在其他地方找到它。此外,我是初學者,謝謝你的意見。 –

2

您可以使用貓和printf

cat $(printf "%0.sfile " {1..3}) 
1

試試這個:

seq 2 | xargs -Inone cat input.csv 
+0

不錯。我只是看着這樣的'xargs'並試圖弄清楚如何讓它忽略'seq'輸出。 –

1

可能最短

cat input.csv{,,} 
0

隨着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] ~]$