Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.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
Shell Unix如何筛选文本文件以在部分行中查找1到49个字符的重复项并仅保存一个_Shell_Sorting_Unix_Duplicates - Fatal编程技术网

Shell Unix如何筛选文本文件以在部分行中查找1到49个字符的重复项并仅保存一个

Shell Unix如何筛选文本文件以在部分行中查找1到49个字符的重复项并仅保存一个,shell,sorting,unix,duplicates,Shell,Sorting,Unix,Duplicates,我必须过滤多行数据,并在位置1-49字符处找到重复项。下一步,重复留在那里,否则重复项将被删除。 脚本必须在shell脚本中。我读过有关排序、uniq的文章,但找不到正确的例子 应从1到49个字符的重复行中删除并仅首先保存。 在示例行中:ALA1FZX 000130190402220180402SFOSIN78Z78Z24被复制4次,并且只保存第1行的第一个 我有这样一个例子: ALA1FZX 000130190402220180402sfossin78z78z241 ALA1FZX 00013

我必须过滤多行数据,并在位置1-49字符处找到重复项。下一步,重复留在那里,否则重复项将被删除。 脚本必须在shell脚本中。我读过有关排序、uniq的文章,但找不到正确的例子

应从1到49个字符的重复行中删除并仅首先保存。 在示例行中:ALA1FZX 000130190402220180402SFOSIN78Z78Z24被复制4次,并且只保存第1行的第一个

我有这样一个例子:

ALA1FZX 000130190402220180402sfossin78z78z241

ALA1FZX 000130190402220180402Sfosinsfossin78Z78Z215

ALA1FZX 000130190402220180402Sfosinsfossin78Z78Z225

ALA1FZX 000130190402220180402Sfosinsfossin78Z78Z235

ALA1FZX 000130190402220180402sfossin78z78z242

ALA1FZX 000130190402220180402sfossin78z78z244

ALA1FZX 000130190402220180402sfossin78z78z245

输出应为:

ALA1FZX 000130190402220180402Sfosinsfossin78Z78Z241

ALA1FZX 000130190402220180402Sfosinsfossin78Z78Z215

ALA1FZX 000130190402220180402Sfosinsfossin78Z78Z225


ALA1FZX 000130190402220180402sfossin78z78z235

如果您不介意先对数据进行排序,可以使用
排序
awk
的组合。从一组匹配行中,这将在对数据进行排序后打印第一行,该数据不一定是原始文件中的第一行

sort inputfile |awk 'BEGIN { last = ""; }
{ pattern = substr($0,1,48); if(pattern != last) print; last = pattern; }'
注意:我使用
substr($0,1,48)
获得48个字符,因为在您的示例中,我只计算48个粗体字符

输入

ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z241
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z215
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z225
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z235
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z242
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z244
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z245
我得到了结果

ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z215
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z225
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z235
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z241

您可以采用两步流程,将ilne中的前49个字符拆分,并将其与原始行一起保存在文件中。然后可以使用
uniq
只保留uniq列。对于大量线路,速度可能较慢。你们有几行?