双引号出现在文件中

时间:2013-07-10 13:15:55

标签: shell awk

我使用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有双引号的记录。我需要创建一个逻辑来搜索第二列中的值。

有人可以帮忙吗?

3 个答案:

答案 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'过滤出引号,然后使用|

将它们传输到awk
$ 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...>