2013-10-09 6 views

ответ

2

Заменить 3 с любым значением n и $1 с колонной вы хотите напечатать:

$ for i in {1..3}; do awk '{print $1}' file; done 
1 
2 
3 
4 
5 
1 
2 
3 
4 
5 
1 
2 
3 
4 
5 

Вы можете сделать это только с awk но вы должны хранить весь файл в память:

$ awk '{a[NR]=$1}END{for(i=1;i<=3;i++)for(j=1;j<=NR;j++)print a[j]}' file 

Это один из тех случаев, когда использование конструкций оболочки действительно имеет смысл.

+0

Также 'кошка File' вместо этого' awk' команды. ** ИЗМЕНИТЬ **: Извините, он говорит о столбцах, а затем 'awk' лучше. – Birei

+1

@Birei Я предполагаю, что, когда OP просит распечатать один столбец, они означают 1 столбец в файле, который имеет много, то есть 'awk' может быть заменен на' cut', но не 'cat'. Если, конечно, файл содержит только один столбец, тогда 'cat' является лучшим выбором. –

2
awk -v n=7 '{s = s $1 ORS} END{for (i=1;i<=n;i++) printf "%s", s}' file 

n любой номер, который вам нравится.

В качестве альтернативы, с GNU AWK:

awk -v n=7 -v RS='\0' -v ORS= 'END{for (i=1;i<=n;i++) print}' file 
+0

Второй подход является умным, но предполагает, что файл содержит только один столбец * (что может быть и так, и описание ОП оставляет желать лучшего). * –

+1

@sudo_O да, я не собираюсь много думать об этом но, поскольку я полностью ожидаю, что следующие несколько ответов от OP будут «о, но мой вход НЕ ДЕЙСТВИТЕЛЬНО выглядит так ...». –

Смежные вопросы