2016-04-21 58 views
2

好傢伙,我有這個文件:ORS拒絕輸出記錄分離到新的生產線

[email protected]:~/l26$ cat p1 
cat dog cow 
cat dog mouse 
dog cow cat 

所以我想要做的是讓第2列,讓他們這樣的:

cat dog 
cat dog 
dog cow 

當我使用我的腳本是:

[email protected]:~/l26$ cat skript 
#!/bin/sh  
output=$(cat $1 | awk 'BEGIN{ORS="\n"} {print $1, $2}') 
echo $output 

我得到的答案:

[email protected]:~/l26$ ./skript p1 
cat dog cat dog dog cow 

如果我使用別的東西而不是\n它的作品。例如:

[email protected]:~/l26$ cat skript 
#!/bin/sh 
output=$(cat $1 | awk 'BEGIN{ORS="()"} {print $1, $2}') 
echo $output 

[email protected]:~/l26$ ./skript p1 
cat dog()cat dog()dog cow() 
[email protected]:~/l26$ 

謝謝你的時間和幫助。

+1

'echo「$ ouput」​​'作爲dbl-quote防止shell剝離額外的空格。祝你好運。 – shellter

+1

貝殼說,強調。 *總是*引用你的變量。你可能並不總是需要,但比起不引用它更好的習慣。還有[UUOC](http://porkmail.org/era/unix/award.html)。 – ghoti

+0

謝謝。你可以回答,而不是表揚,所以我可以把它作爲回答關閉它? –

回答

4

總是引用你的變量。它可能並不總是必需的,但它是一個更安全的習慣是在

另外,還可以簡化您的awk使用,包括錯誤處理的隱含缺少選擇:

output=$(awk 'BEGIN{ORS="\n"} {print $1 ORS $2}' "${1:?No file provided}") 
echo "$output" 

雖然它可能會更好地明確你的錯誤處理:

#!/bin/sh 

if [ -z "$1" ]; then 
    echo "ERROR: no file specified" >&2 
    exit 1 
elif [ ! -f "$1" ]; then 
    echo "ERROR: no such file '$1'" >&2 
    exit 1 
elif [ ! -r "$1" ]; then 
    echo "ERROR: file unreadable: '$1'" >&2 
    exit 1 
elif [ ! -s "$1" ]; then 
    echo "WARNING: file empty: '$1'" >&2 
fi 

output=$(awk -v ORS="\n" '{print $1,$2}' "$1") 

echo "$output"