我试图逐行读取文件,对每行进行字符串操作,然后将输出写入文件;
cat fileName | awk '{...}' >> fileOut
我要完成的特定字符串操作是,对于每一行,首先在某个索引后打印所有内容,对于每一行都相同,例如X,不包括换行符,然后是“:”,然后是第一列,尽管我也可以根据需要通过子字符串来完成此操作。我发现了一些示例,这些示例结合了列值的变量声明,将其设置为零,子字符串的变量声明(有或没有终止于最后一个索引),以及将它们与print / f结合在一起的方法,但是在所有示例中,都使用了子字符串和列索引是互斥的。
在示例中,每次尝试用一个替代另一个时,第一列的内容似乎总是简单地替换子字符串的内容。由于我尝试了许多方法,因此我将提供最新的尝试;
假设输入的一行是"1234 abcd efgh IJKL mnop"
,我想从索引10开始打印所有内容,然后依次打印" : "
和第1列,我的命令如下所示:
cat fileName | awk '{printf(“%s : %s/n”,substr($0,10),$1)}' >> fileOut
cat fileName | awk '{A=substr($0,10);B=$1;printf(“%s : %s/n”,A,B)}' >> fileOut
cat fileName | awk '{print substr($0,10)” : “$1}' >> fileOut
但是,到目前为止,在每种情况下,返回的字符串都以" : "
开头,之后是$1
的内容,然后是substr,该字符的开头是第一个一致的字符,例如, / p>
" : 1234L mnop"
,当我期望"efgh IJKL mnop : 1234"
为什么使用列覆盖substr的返回?