Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
String 使用shell脚本从文件中提取字符串_String_Unix_Shell_Extract - Fatal编程技术网

String 使用shell脚本从文件中提取字符串

String 使用shell脚本从文件中提取字符串,string,unix,shell,extract,String,Unix,Shell,Extract,我有一个名为log.txt的文件。文件包含如下内容:- /proc used avail 10 100 如何使用shell脚本从该文件中提取以下字符串。我希望提取以下字符串 /proc 10 100 每当一行与/proc匹配时,上述awk命令调用getline两次。print语句然后打印出匹配后的第二行 输出: /proc 10 100 每当一行与/proc匹配时,上述awk命令调用getline两次。print语句然后打印出匹配后的第二行 输出: /proc 10 100

我有一个名为log.txt的文件。文件包含如下内容:-

/proc
used    avail
10      100
如何使用shell脚本从该文件中提取以下字符串。我希望提取以下字符串

/proc
10
100
每当一行与
/proc
匹配时,上述
awk
命令调用
getline
两次。
print
语句然后打印出匹配后的第二行

输出:

/proc
10
100
每当一行与
/proc
匹配时,上述
awk
命令调用
getline
两次。
print
语句然后打印出匹配后的第二行

输出:

/proc
10
100

使用sed,如果是10到100之间的空格:

sed -e '2d;3s/  */\n/' log.txt
paste -s -d " " file | tr -s " " | cut -d " " -f 1,4,5 | tr " " "\n"
如果您有10到100个标签,并且您提供了GNU sed:

sed -e '2d;3s/\t\t*/\n/' log.txt

如果是10到100之间的制表符,并且您没有给出GNU sed,而是实际制表符,而不是上面的2\t。

使用sed,如果是10到100之间的空格:

sed -e '2d;3s/  */\n/' log.txt
paste -s -d " " file | tr -s " " | cut -d " " -f 1,4,5 | tr " " "\n"
如果您有10到100个标签,并且您提供了GNU sed:

sed -e '2d;3s/\t\t*/\n/' log.txt
如果是10到100之间的制表符,并且您没有提供GNU sed,而是实际制表符,而不是上面的2\t。

避免使用sed(或awk)并使用标准UNIX实用程序,如果是10到100之间的空格:

sed -e '2d;3s/  */\n/' log.txt
paste -s -d " " file | tr -s " " | cut -d " " -f 1,4,5 | tr " " "\n"
如果是10到100之间的选项卡,并且有GNU实用程序:

paste -s -d "\t" file | tr -s "\t" | cut -f 1,4,5 | tr "\t" "\n"
如果您的选项卡介于10和100之间,并且您没有提供GNU实用程序,但提供了实制表符而不是上面的\t和实制表符而不是\n.

避免使用sed(或awk)并使用标准UNIX实用程序,并且如果您的空格介于10和100之间:

sed -e '2d;3s/  */\n/' log.txt
paste -s -d " " file | tr -s " " | cut -d " " -f 1,4,5 | tr " " "\n"
如果是10到100之间的选项卡,并且有GNU实用程序:

paste -s -d "\t" file | tr -s "\t" | cut -f 1,4,5 | tr "\t" "\n"

若您的标签在10到100之间,并且您并没有提供GNU实用程序,但实际标签代替了上面的\t,实际标签代替了\n。

请不要忘记对您现有的问题进行说明。在您对Eric的答案和我自己的答案发表评论之后,请编辑您的问题,以包括
log.txt
的实际内容以及您的实际预期输出,而不是期望StackOverflow社区猜测。非常感谢!啊哈。谢谢@dogbane。一点格式就可以改变世界。别忘了对你现有的问题进行分析。在你对Eric的答案和我自己的答案发表评论之后,请你编辑你的问题,以包括
log.txt
的实际内容以及你的实际预期输出,而不是期望StackOverflow社区猜测。非常感谢!啊哈。谢谢@dogbane。稍微格式化一下就可以创建difference.thx,但实际上文件内容与上面的不同。它类似于:-在第一行中,它是唯一的/proc。第二行是“已使用”和“可用”,下一行是“10”和“100”。低于“使用”的为“10”,低于“利用”的为“100”。结构是这样的。希望你能理解我想在这里描述的内容,请看我在第一页的问题(向上滚动)。。。你的答案不适用于thatthx,但实际上文件内容与上述内容不同。它类似于:-在第一行中,它是唯一的/proc。第二行是“已使用”和“可用”,下一行是“10”和“100”。低于“使用”的为“10”,低于“利用”的为“100”。结构是这样的。希望你能理解我想在这里描述的内容,请看我在第一页的问题(向上滚动)。。。你的答案并不适用于此