我正在尝试做一些非常简单的事情,但它似乎比预期更复杂...... 我在一个文本文件中的行,用逗号分隔,我想输出到另一个文件,没有第一个字段。
输入:
echo file1,item, 12345678 | awk -F',' '{OFS = ";";$1=""; print $0}'
输出:
;item; 12345678
正如您所看到的,12345678之前的空格只是合并到一个空格中。 我也尝试过cut命令:
echo file1,item, 12345678 | cut -d, -f2-
我得到了同样的结果。
有解决方法吗?
实际上我的整个脚本如下:
cat myfile | while read l_line
do
l_line="'$l_line'"
v_OutputFile=$(echo $l_line | awk -F',' '{print $1}')
echo $(echo $l_line | cut -d, -f2-) >> ${v_OutputFile}
done
但是l_line中的所有空格仍然存在但是一个空格被移除。我还在文件中创建了引号但结果相同。
答案 0 :(得分:1)
问题在于您调用了echo
命令,用于向上方提供awk
测试数据。 shell正在查看此命令:
echo file1,item, 12345678
将file1,item,
和12345678
视为echo
的两个独立参数。 echo
只打印所有参数,用一个空格分隔。
如果你引用空格,如下:
echo 'file1,item, 12345678'
shell会将此解释为提供给echo
的单个参数,因此您可以获得预期的结果。
在编辑OP后更新 - 看过完整的脚本后,您可以完全在awk
中执行此操作:
awk -F, '{ OFS = "," ; f = $1 ; sub("^[^,]*,","") ; print $0 >> f }' myfile
答案 1 :(得分:1)
它与awk无关。引用echo中的字符串:
#with quotes
kent$ echo 'a,b, c'|awk -F, -v OFS=";" '{$1="";print $0}'
;b; c
#without quotes
kent$ echo a,b, c|awk -F, -v OFS=";" '{$1="";print $0}'
;b; c