在linux中使用单词作为cut命令的分隔符,而不使用awk
我试图在一个由某个字符串分隔的文件中获取第二行,它的工作方式通常类似于在linux中使用单词作为cut命令的分隔符,而不使用awk,awk,cut,Awk,Cut,我试图在一个由某个字符串分隔的文件中获取第二行,它的工作方式通常类似于awk-F'::我的分隔符:“{print$2}”,但是如果我试图打印$2,它将打印传递到awk命令所在函数的第二个参数。有没有其他方法可以用分隔符分隔一行并打印结果的某一部分 这正是我遇到的问题: for transaction in $(cat $1) do echo "$transaction" | awk -F ':: My Delimiter ::' '{print $2}' >> testLog
awk-F'::我的分隔符:“{print$2}”
,但是如果我试图打印$2
,它将打印传递到awk
命令所在函数的第二个参数。有没有其他方法可以用分隔符分隔一行并打印结果的某一部分
这正是我遇到的问题:
for transaction in $(cat $1)
do
echo "$transaction" | awk -F ':: My Delimiter ::' '{print $2}' >> testLog.data.out
done
注意:分隔符将与描述的完全相同:我的定界符::而不是使用cut,我认为您应该真正使用awk-您的示例
awk-F'::我的定界符:“{print$2}”
应该有效。如果将传递到包含该awk的函数中的第二个参数打印出来,则意味着$2
不在单引号内-可能使用了双引号?这行不通(请注意双引号):
但这会(你的例子):
您可以使用以下代码:
echo ':: My Delimiter ::' | awk '{split($0,v,"My Delimiter"); print v[2]}'
>>> echo 'ThisIsINeed0 My Delimiter ThisIsINeed1' | awk '{split($0,v," My Delimiter "); print v[1]}'
ThisIsINeed0
>>> echo 'ThisIsINeed0 My Delimiter ThisIsINeed1' | awk '{split($0,v," My Delimiter "); print v[2]}'
ThisIsINeed1
>>> echo 'This Is I Need 0 My Delimiter This Is I Need 1' | awk '{split($0,v," My Delimiter "); print v[2]}'
This Is I Need 1
>>> echo 'This Is I Need 0 My Delimiter This Is I Need 1' | awk '{split($0,v," My Delimiter "); print v[1]}'
This Is I Need 0
您能用一些可以重现问题的示例数据显示您的代码吗?
f我尝试打印$2,它将打印传递到awk命令所在函数的第二个参数
您是执行“{print$2}”
还是“{print$2}”
”,听起来您调用awk的代码中有一个bug。创建并发布一个完整(但最小)的代码,该代码可以重现问题,再加上简洁、可测试的示例输入和预期输出,这样我们就可以开始尝试帮助您调试它。不起作用,它返回一个空格。如果我把它改为“v[1]”,它会回显未格式化的字符串,就像忽略分隔符的awkadd空格一样?!?!可能会有结果。我用一行代码更新了帖子,这给我带来了麻烦。由于某些原因,它甚至不能使用单引号。这条评论让我研究了intput本身,而cat似乎存在一个问题。我在逐字阅读,而不是逐行阅读。
awk -F ':: My Delimiter ::' '{print $2}'
echo ':: My Delimiter ::' | awk '{split($0,v,"My Delimiter"); print v[2]}'
>>> echo 'ThisIsINeed0 My Delimiter ThisIsINeed1' | awk '{split($0,v," My Delimiter "); print v[1]}'
ThisIsINeed0
>>> echo 'ThisIsINeed0 My Delimiter ThisIsINeed1' | awk '{split($0,v," My Delimiter "); print v[2]}'
ThisIsINeed1
>>> echo 'This Is I Need 0 My Delimiter This Is I Need 1' | awk '{split($0,v," My Delimiter "); print v[2]}'
This Is I Need 1
>>> echo 'This Is I Need 0 My Delimiter This Is I Need 1' | awk '{split($0,v," My Delimiter "); print v[1]}'
This Is I Need 0