如何使用 for 循环删除重复 bash 中第一个数字的行?
How to use a for loop to remove lines that repeat the first number in bash?
通过 运行 find /mnt/ExtraHDD1/ -type f -links +1 -printf '%i %n %p\n' | sort -n > test.txt
,我得到以下输出:
32113282 3 /mnt/ExtraHDD1/1/6.png
32113282 3 /mnt/ExtraHDD1/2/6.png
32113282 3 /mnt/ExtraHDD1/3/6.png
32113284 2 /mnt/ExtraHDD1/1/8.png
32113284 2 /mnt/ExtraHDD1/2/8.png
命令 I 运行 列出 /mnt/ExtraHDD1/ 中的所有 hard-link。我正在尝试生成一个排除列表,这样我就不会将同一个文件多次上传到云端。在每一行中,第一个数字(例如 32113282)代表索引节点号。第二个数字(例如 3)表示文件被硬 linked 的次数。由于这是一个排除列表,我想删除每个 inode 编号的第一个实例,以便我排除除第一个副本之外的 hard-link 的所有副本。所以在这种情况下,我想要以下输出:
32113282 3 /mnt/ExtraHDD1/2/6.png
32113282 3 /mnt/ExtraHDD1/3/6.png
32113284 2 /mnt/ExtraHDD1/2/8.png
如何在 bash 中使用 for 循环来完成此操作?我知道如何在 Java 中做到这一点,但 bash 语法让我感到困惑。
awk
救援!
如果我没理解错的话,第一个字段是关键。
$ awk 'a[]++' file
32113282 3 /mnt/ExtraHDD1/2/6.png
32113282 3 /mnt/ExtraHDD1/3/6.png
32113284 2 /mnt/ExtraHDD1/2/8.png
通过 运行 find /mnt/ExtraHDD1/ -type f -links +1 -printf '%i %n %p\n' | sort -n > test.txt
,我得到以下输出:
32113282 3 /mnt/ExtraHDD1/1/6.png
32113282 3 /mnt/ExtraHDD1/2/6.png
32113282 3 /mnt/ExtraHDD1/3/6.png
32113284 2 /mnt/ExtraHDD1/1/8.png
32113284 2 /mnt/ExtraHDD1/2/8.png
命令 I 运行 列出 /mnt/ExtraHDD1/ 中的所有 hard-link。我正在尝试生成一个排除列表,这样我就不会将同一个文件多次上传到云端。在每一行中,第一个数字(例如 32113282)代表索引节点号。第二个数字(例如 3)表示文件被硬 linked 的次数。由于这是一个排除列表,我想删除每个 inode 编号的第一个实例,以便我排除除第一个副本之外的 hard-link 的所有副本。所以在这种情况下,我想要以下输出:
32113282 3 /mnt/ExtraHDD1/2/6.png
32113282 3 /mnt/ExtraHDD1/3/6.png
32113284 2 /mnt/ExtraHDD1/2/8.png
如何在 bash 中使用 for 循环来完成此操作?我知道如何在 Java 中做到这一点,但 bash 语法让我感到困惑。
awk
救援!
如果我没理解错的话,第一个字段是关键。
$ awk 'a[]++' file
32113282 3 /mnt/ExtraHDD1/2/6.png
32113282 3 /mnt/ExtraHDD1/3/6.png
32113284 2 /mnt/ExtraHDD1/2/8.png