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"
大家好,我有这个文件:
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"