我使用awk遇到问题。实际上我有两种类型的文件。下面是文件的包含。
File1中
x|y|z|a|b|c
x|y|z|a|b|c
x|y|z|a|b|c
文件2
"x"|"y"|"z"|"a"|"b"|"c"
"x"|"y"|"z"|"a"|"b"|"c"
"x"|"y"|"z"|"a"|"b"|"c"
我必须使用awk从第二列中搜索一些值。但问题是file1有没有引号的记录,而file2有双引号的记录。我需要创建一个逻辑来搜索第二列中的值。
有人可以帮忙吗?
答案 0 :(得分:1)
我注意到没有必要清理文件。要在两个文件中查找值y
,您可以执行以下操作:
$ awk -F"|" '$2~/y/' file1 file2
x|y|z|a|b|c
x|y|z|a|b|c
x|y|z|a|b|c
"x"|"y"|"z"|"a"|"b"|"c"
"x"|"y"|"z"|"a"|"b"|"c"
"x"|"y"|"z"|"a"|"b"|"c"
输入更复杂:
$ cat file1
x|y|z|a|b|c
x|T|z|a|b|c
x|aa|y|a|b|c
$ cat file2
"x"|"y"|"z"|"a"|"b"|"c"
"x"|"22"|"z"|"a"|"b"|"c"
"x"|"t"|"y"|"a"|"b"|"c"
我们得到:
$ awk -F"|" '$2~/y/' file1 file2
x|y|z|a|b|c
"x"|"y"|"z"|"a"|"b"|"c"
答案 1 :(得分:1)
我希望您发布了一些示例输入(不仅仅是x / y占位符的格式,而是实际数据)和预期输出,因此我们可以测试我们的解决方案,但这应该做你想要的:
awk -F'"?[|]"?' '$2 == whatever' file
用您要查找的内容替换“无论什么”,如果您想要RE比较而不是精确比较,则将==替换为〜。
如果你必须能够查看第一个和最后一个字段,那么有各种解决方案,“最佳”解决方案将取决于您的实际数据,但如果您在“无论如何”中没有不良的RE元字符,这是一种方法“:
awk -F'"?[|]"?' ' $1 ~ "^\"?" whatever "$"' file
awk -F'"?[|]"?' '$NF ~ "^" whatever "\"?$"' file
答案 2 :(得分:0)
只需使用sed 's/\"//g'
过滤出引号,然后使用|
$ sed 's/\"//g' file2
x|y|z|a|b|c
x|y|z|a|b|c
x|y|z|a|b|c
您的最终结果将类似于
$ sed 's/\"//g' file2 | awk <magic goes here...>