Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在linux中使用单词作为cut命令的分隔符,而不使用awk_Awk_Cut - Fatal编程技术网

在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