2013-07-26 108 views

回答

5

在這種情況下,我不會AWK使用在所有:

columns() { tr -s '[:blank:]' ' ' | cut -d ' ' -f "[email protected]"; } 

這使用tr到空白的所有序列擠一個空格,然後cut提取你感興趣的領域。

ls -l | columns 1,5,9- 

注意,你shouldn't parse the output of ls

+1

+1爲正確的解決方案。我可能會使用'tr -s'[:blank:]''\ t'',這樣你就不需要在剪切的參數中指定'-d'''但是nbd。 –

1
ls -l | nawk -v r="3,5" 'BEGIN{split(r,a,",")}{for(i in a)printf $a[i]" ";print "\n"}' 

現在,你可以簡單地改變你的r變量在shell腳本,並把它傳遞。 或者您可以在您的shell腳本中配置它並使用r=$your_list_var

將使用awk命令打印$your_list_var中的字段編號。 上面的示例輸出ls -l輸出的第3個和第5個字段。

+3

+1,但是將'split'放在'BEGIN'塊中,所以你不必爲每一行都做。 –

+0

是的,你是對的。更新答案 – Vijay

+1

當輸入文件包含printf格式化字符時,將會以加密方式失敗,並且不一定按輸入順序或參數順序輸出字段。它還會在每行的末尾添加一個空格,並在每個輸出行之間添加一個虛假的換行符。 –

2
awk -v c="3,5" ' 
    BEGIN{ split(c,a,/[^[:digit:]]+/) } 
    { for(i=1;i in a;i++) printf "%s%s", (i==1?"":OFS), $(a[i]); print "" } 
' 

使用您想要的任何非數字作爲列號分隔符(例如逗號或空格)。

相關問題