ORS 拒绝将输出记录分隔到新行

ORS refuse to separate output record to new line

大家好,我有这个文件:

paumic@os:~/l26$ cat p1
cat dog cow
cat dog mouse
dog cow cat

所以我想做的是获取前 2 列并将它们设置为这样:

cat dog
cat dog
dog cow

当我使用我的脚本时:

paumic@os:~/l26$ cat skript
#!/bin/sh    
output=$(cat  | awk 'BEGIN{ORS="\n"} {print , }' )
echo $output

我得到答案:

paumic@os:~/l26$ ./skript p1
cat dog cat dog dog cow

如果我使用其他东西而不是 \n 它会起作用。示例:

paumic@os:~/l26$ cat skript
#!/bin/sh
output=$(cat  | awk 'BEGIN{ORS="()"} {print , }' )
echo $output

paumic@os:~/l26$ ./skript p1
cat dog()cat dog()dog cow()
paumic@os:~/l26$

感谢您的宝贵时间和帮助。

总是引用你的变量。它可能并不总是必需的,但这是一个更安全的习惯。

此外,您可以简化 awk 的使用,并隐含地包含对缺失选项的错误处理:

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

不过最好明确说明错误处理方式:

#!/bin/sh

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

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

echo "$output"