Baa*_*rud 2 command-line shell awk text-processing sort
假设我有两个具有共同字段的文件。我想根据在此文件中找到的字段(例如数字字段)对第一个进行排序……但我希望这种重新排序也适用于另一个文件 - 通过公共字段。
举个例子 -完全凭空抓起来;-) - 让我们拿/etc/passwd和/etc/shadow:
/etc/passwd: (……) sshd:x:124:65534::/var/run/sshd:/usr/sbin/nologin sndiod:x:999:29::/var/lib/sndiod:/usr/sbin/nologin dictd:x:125:135:Dictd 服务器,,,:/var/lib/dictd:/bin/false postgres:x:126:136:PostgreSQL 管理员,,,:/var/lib/postgresql:/bin/bash (……)
/etc/shadow: (……) sshd:*:17055:0:99999:7::: sndiod::17055:::::: 字典:*:17055:0:99999:7:: postgres:*:17055:0:99999:7::: (……)
在 UID 上按数字对/etc/passwd 进行排序很容易:
sort -n -t: -k3 /etc/passwd > pw
上面的几行产生:
/etc/passwd: (……) sshd:x:124:65534::/var/run/sshd:/usr/sbin/nologin dictd:x:125:135:Dictd 服务器,,,:/var/lib/dictd:/bin/false postgres:x:126:136:PostgreSQL 管理员,,,:/var/lib/postgresql:/bin/bash sndiod:x:999:29::/var/lib/sndiod:/usr/sbin/nologin (……)
但是,/ etc / shadow文件并不能有一个数字UID场我可以排序后...但它确实-像/ etc / passwd文件-得到了一个用户名,场...
那么有没有办法重新排序/etc/shadow 中的行,以便用户名字段与数字排序 的用户名字段具有相同的顺序/etc/passwd?
sort或类似的东西——可以在该文件中的某个键之后对文件 A进行排序,并同时在两个文件共享的公共字段上对文件 B进行排序?加入文件,对合并后的文件进行排序,然后去掉不需要的列。
在这种情况下,字段 1 of/etc/passwd将与字段 1 连接/etc/shadow,:作为字段分隔符。
join -t : -1 1 -2 1 /etc/passwd /etc/shadow |
sort -t : -k 3,3n |
cut -d : -f 1,8-
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
818 次 |
| 最近记录: |