如何在Linux中无需列号提取含KiB/MiB/GiB的FILESIZE列
提取yt-dlp格式输出中指定格式的FILESIZE数值
生成测试文件
先确保已安装yt-dlp,再生成测试数据文件:
# Debian/Ubuntu系统安装yt-dlp sudo apt install yt-dlp # 生成测试文件 yt-dlp -F https://youtu.be/njX2bu-_Vw4 > cp1.txt
可行的Shell命令
使用awk实现不依赖固定列号的提取,核心逻辑是先定位FILESIZE列的位置,再筛选符合格式的数值:
awk ' NR == 1 { # 遍历表头,定位FILESIZE所在列 for (i=1; i<=NF; i++) { if ($i == "FILESIZE") { col = i break } } } NR > 1 && col { # 匹配仅包含KiB/MiB/GiB的数值格式 if ($col ~ /^[0-9.]+(KiB|MiB|GiB)$/) { print $col } }' cp1.txt
命令说明
- 表头处理:遍历第一行的所有列,找到
FILESIZE对应的列索引并存储 - 数据行处理:跳过表头,仅在已定位到目标列的情况下,检查对应列内容是否符合「数字(可带小数点)+KiB/MiB/GiB」的格式,符合则输出
- 如果需要去重,可追加
| sort -u:awk ' NR == 1 { for (i=1; i<=NF; i++) { if ($i == "FILESIZE") { col = i break } } } NR > 1 && col { if ($col ~ /^[0-9.]+(KiB|MiB|GiB)$/) { print $col } }' cp1.txt | sort -u
内容的提问来源于stack exchange,提问作者PBS
相关产品推荐
相关产品推荐

