You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GNU Parallel输出的名称字段中添加序列号后四位

问题描述

我通过以下命令获取设备IP列表:

# 从ADB服务器获取所有设备
wIP=$(adb devices | tail -n +2 | grep "device" | cut -f1 | cut -f1 -d\ );

$wIP 的结果为:

192.168.1.10
192.168.1.20

接着用两条命令获取设备名称和序列号:

wName=$(parallel adb -s {} shell getprop ro.product.display_name ::: "$wIP");
wSerial=$(parallel adb -s {} shell getprop ro.serialno ::: "$wIP");

$wName 的结果为:

Samsung Watch4
Samsung Watch4

$wSerial 的结果为:

RFAR82JDGLJ
RFAR82JPRFC

之后用以下命令打印信息:

printf "%-22s %-22.27s %-14.12s\n" "IP" "Name" "Serial"
printf "%-22s %-22.27s %-14.14s\n" "$wIP" "$wName" "$wSerial"

最终输出:

IP             Name                 Serial
192.168.1.10   Samsung Watch4       RFAR82JDGLJ
192.168.1.20   Samsung Watch4       RFAR82JPRFC

现在需要修改代码,让Name字段带上对应序列号的最后四位(放在括号里),得到如下输出:

IP             Name                   Serial
192.168.1.10   Samsung Watch4 (DGLJ)  RFAR82JDGLJ
192.168.1.20   Samsung Watch4 (PRFC)  RFAR82JPRFC

原完整代码:

wIP=$(adb devices | tail -n +2 | grep "device" | cut -f1 | cut -f1 -d\ );

wName=$(parallel adb -s {} shell getprop ro.product.display_name ::: "$wIP");
wSerial=$(parallel adb -s {} shell getprop ro.serialno ::: "$wIP");

printf "%-22s %-22.27s %-14.12s\n" "IP" "Name" "Serial"
printf "%-22s %-22.27s %-14.14s\n" "$wIP" "$wName" "$wSerial"
解决方案

要实现需求,需将设备的名称、序列号按行配对,给每个名称拼接对应序列号的最后四位,再按格式打印。修改后的完整代码如下:

wIP=$(adb devices | tail -n +2 | grep "device" | cut -f1 | cut -f1 -d\ );

wName=$(parallel adb -s {} shell getprop ro.product.display_name ::: "$wIP");
wSerial=$(parallel adb -s {} shell getprop ro.serialno ::: "$wIP");

# 打印表头
printf "%-22s %-28s %-14s\n" "IP" "Name" "Serial"

# 将IP、名称、序列号按行对应,处理后逐行打印
paste <(echo "$wIP") <(echo "$wName") <(echo "$wSerial") | while read -r ip name serial; do
    # 截取序列号最后四位
    serial_suffix=${serial: -4}
    # 拼接带后缀的新名称
    new_name="$name ($serial_suffix)"
    # 按格式打印单条设备信息
    printf "%-22s %-28s %-14s\n" "$ip" "$new_name" "$serial"
done

关键步骤说明

  1. 按行配对设备信息:用paste命令把wIP、wName、wSerial的内容按行对齐,确保每一行对应同一台设备的三个参数。
  2. 截取序列号后缀:通过bash字符串截取语法${serial: -4}提取序列号的最后四位。
  3. 拼接并打印:将原名称与序列号后缀拼接成新名称,调整printf的格式宽度(如%-28s)适配新名称长度,保证排版整齐。

内容的提问来源于stack exchange,提问作者Sasha Milic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:55:18