仅显示文本文件中选定的数据,而不从中删除任何数据

仅显示文本文件中选定的数据,而不从中删除任何数据

我有一个文件,里面有日期(格式为 YYYY M DD)及其最高/最低/平均温度,以及每天的降水量。日期位于字符串的前三列(例如 1900 9 19),空格键是分隔符。

我需要按最高温度对它们进行排序(使用“sort -k 5 -n”命令按该列排序),现在想显示日期,而不是温度和其他数据。我该怎么做才能只选择这些列,而不从原始文件中删除任何内容?

示例(只有最后一行是在文件中找到的真实数据):

FIELDS
   1 2  3   4   5   6     7  8    9
YYYY M DD AVG MAX MIN ????? ?? ????

1980 1 12 252 360 140 10073 59 2692

答案1

按照上述方法进行排序后,将文件通过其他文本处理工具, 例如awk如上面的 Rinzwind 评论所示,或者sed,每次要显示它时。这是文本处理,也是使用 Linux(和 Ubuntu)如此有用的原因之一。

然后,将命令放入shell 脚本。编写脚本将使运行变得更容易,因为您不必每次都输入精确的命令,而只需输入脚本的名称即可运行它。

脚本意味着编写一个文件,其中包含要使用的命令舍邦在第一行,然后使该文本文件可执行为 shell 脚本。如果您制作的脚本名称是“showmax”,那么您将使其可执行,以便您可以通过输入其名称来运行它。“showmax”的内容可以包含:

#!/bin/sh
# /user/local/bin/showmax 2019-08-15 fedeaimar 
# Sort the sourcefile on maximum temp then show just the date
# 
sort -k 5 -n /path/to/sourcefile | awk '{print $1, $2, $3}'  
# end of script

在“showmax”中,您需要替换/路径/至/数据文件的位置,以及源文件使用您的数据所在文件的名称。

要使“showmax”可执行,请执行以下操作:

chmod u+x showmax

然后将其移入在/usr/本地/bin因此可以从任何地方找到它。

你甚至可以把它放在你的桌面上如果你希望。

答案2

你可以更慷慨一点,提供几行输入。我制作了一个任意输入文件来测试以下代码:

$ sort -rnk5 ask1165945 | cut -d' ' -f1,2,3
1980 1 14
1980 1 12
1980 1 15
1980 1 16
1980 1 13

在哪里:

$ cat ask1165945 
1980 1 12 252 360 140 10073 59 2692
1980 1 13 252 320 140 10073 59 2692
1980 1 14 252 363 140 10073 59 2692
1980 1 15 252 352 140 10073 59 2692
1980 1 16 252 327 140 10073 59 2692

相关内容