bash - 整行的 bash 脚本中的“while .. read”循环是否存在系统分配的变量?
问题描述
我正在使用以下脚本模板来处理制表符分隔的文本文件:
while IFS=$'\t' read -r column1 column2 column3 ; do
printf "%b\n" "column1<${column1}>"
printf "%b\n" "column2<${column2}>"
printf "%b\n" "column3<${column3}>"
done < "myfile"
我仍然可以通过一些内部变量访问整行吗?
目的:文本文件是在另一个脚本中创建的外部驱动器的文件索引
find "$1" \( -size +40k -fprintf ~/Documents/fs/${1}.txt '%CY-%Cm-%Cd-%CH-%CM \t %-10s \t %h \t %f\n' \)
我想根据文件类型(视频、音频、图片、档案等)将这些行拆分为单独的文件。
当然我可以通过使用所有的字段变量来重新组装原始行,但是有没有更直接的方法?目前我的脚本是这样的:
while IFS=$'\t' read -r fdate fsize ffolder filename ; do
f_ext=${filename##*.}
f_ext=${f_ext,,}
if [[ "$f_ext" == "jpg" || "$f_ext" == "jpeg" || "$f_ext" == "gif" || "$f_ext" == "png" || "$f_ext" == "bmp" || "$f_ext" == "cbr" || "$f_ext" == "psd" || "$f_ext" == "jp2" || "$f_ext" == "tif" || "$f_ext" == "tiff" ]];then
echo -e "$fdate\t$fsize\t$ffolder\t$filename" >> "$fdir/${txtfnpure}Pics.txt"
elif [[ "$f_ext" == "mka" || "$f_ext" == "m4a" || "$f_ext" == "aac" || "$f_ext" == "mp3" || "$f_ext" == "ogg" || "$f_ext" == "mp2" || "$f_ext" == "wav" || "$f_ext" == "wave" || "$f_ext" == "ac3" || "$f_ext" == "wma" || "$f_ext" == "flac" || "$f_ext" == "fla" || "$f_ext" == "aiff" || "$f_ext" == "aif" ]];then
...
解决方案
解决方法bash
:
while IFS='' read -r line; do
IFS=$'\t' read -r column1 column2 column3 <<< "$line"
echo "complete line: $line"
printf "%b\n" "column1<${column1}>"
printf "%b\n" "column2<${column2}>"
printf "%b\n" "column3<${column3}>"
done < "myfile"
推荐阅读
- macos - 单击“显示标签栏”时没有加号按钮
- imagemagick - 调整大小模糊
- python - 为什么芹菜周期性任务只触发一次功能
- powerbi - Power BI 中的折线图
- python - 如何避免在 pandas 的整个列中出现 NaN?
- java - TaskStackBuilder 无法通过通知工作
- python - Python - 在 __iter__ 方法中设置变量
- python - 给定 2 个字符串,返回两个字符串包含相同长度的 2 子字符串的位置数
- java - 为什么这个 for 循环会显示 4 和 5 之前的数字?
- java - 无法运行 mvn release:使用捆绑的 Maven 从 IntelliJ 准备