awk如何删除一个文件?

netxuning 2009-09-15 10:20:05

awk -F, '{print $2}' test.txt


上边代码中,$2是一个文件名,我希望在awk将文件名打印后删除它,如何做到?还有建立目录等操作等!
...全文
719 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenfli 2010-10-27
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 songchaoo 的回复:]

rm:
awk -F, '{print $2}' test.txt | xargs rm -rf,
mkdir:
awk -F, '{print $2}' test.txt | xargs mkdir -p,
mv 不太清楚xargs能不能传2个参数,楼主可以试一下
awk -F, '{print $2" "$3}' test.txt | xargs mv,
[/Quote]
谢谢提供啊,真好用。
steptodream 2009-09-15
  • 打赏
  • 举报
回复
我在你的基础上改了改 我在我的机器上测试了 你试试吧
我使用了一个零时文件temp.txt 没有影响吧


#!/bin/sh
awk -F, '{
tmp=$2/1000; l1=tmp/100%1000; l2=tmp%100
printf("%s%d/%02d/ %s%d/%02d/ %d.xml\n", "/dir1/",l1,l2,"/dir2/",l1,l2,
$2) }' test.txt > temp.txt

filename=`awk '{print $3}' temp.txt`
for file in $filename
do
dir1=`awk '/'$file'/ {print $1}' temp.txt`
dir2=`awk '/'$file'/ {print $2}' temp.txt`
if test -d $dir2
then
mv $dir1$file $dir2$file
else
mkdir -p $dir2
mv $dir1$file $dir2$file
fi
done
rm -rf temp.txt
netxuning 2009-09-15
  • 打赏
  • 举报
回复
没思路!!!
netxuning 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 steptodream 的回复:]
我去吃饭了 吃饭回来你要没解决我就把代码写给你
[/Quote]

嗯,谢谢,我先考虑考虑!
steptodream 2009-09-15
  • 打赏
  • 举报
回复
我去吃饭了 吃饭回来你要没解决我就把代码写给你
steptodream 2009-09-15
  • 打赏
  • 举报
回复
你不是已经实现了吗按你写的就不用rm了 直接移动就可以了
你用mv 把文件移动过去就行了啊 在移动时先判断目录是否存在 如果存在直接移动 目录不存在创建文件夹 再移动
netxuning 2009-09-15
  • 打赏
  • 举报
回复
就是,将/dir1里的的移动到后边/dir2的,期间还要判断/dir2/491/69/这样的路径是否存在,如果不存在还要进行mkdir -p /dir2/491/69/的操作!
netxuning 2009-09-15
  • 打赏
  • 举报
回复
我还要实现更复杂的功能,
比如说,$2代表一个文件filename,我要通过文件的特征计算出两个路径,并将文件从路径1移动到路径2


test.txt
46791895,2449166600
46791894,2449169430
46791893,2449169431
46791892,2449169432
46791891,2449172071
46791890,2449169310
46791889,2449169311
46791888,2449169200
46791887,2449169312

awk -F, '{
tmp=$2/1000; l1=tmp/100%1000; l2=tmp%100
printf("%s%d/%02d/%d.xml %s%d/%02d/%d.xml\n", "/dir1/",l1,l2,$2, "/dir2/",l1,l2,$2) }' test.txt

/dir1/491/66/2449166600 /dir2/491/66/2449166600
/dir1/491/69/2449169430 /dir2/491/69/2449169430
/dir1/491/69/2449169431 /dir2/491/69/2449169431
/dir1/491/69/2449169432 /dir2/491/69/2449169432
/dir1/491/72/2449172071 /dir2/491/72/2449172071
/dir1/491/69/2449169310 /dir2/491/69/2449169310
/dir1/491/69/2449169311 /dir2/491/69/2449169311
/dir1/491/69/2449169200 /dir2/491/69/2449169200
/dir1/491/69/2449169312 /dir2/491/69/2449169312


如上是我所求,能否实现呢?
steptodream 2009-09-15
  • 打赏
  • 举报
回复
别的创建也类似 你把命令组合起来用就行了呀
steptodream 2009-09-15
  • 打赏
  • 举报
回复
rm -rf `awk -F, '{print $2}' test.txt`

就可以了
steptodream 2009-09-15
  • 打赏
  • 举报
回复
可以和系统命令组合起来用啊

rm -rf `awk -F, '{print $2}' test.txt`
steptodream 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 netxuning 的回复:]
看来,awk就是为处理一些格式化的文本文件而设计的,内部没有那些对系统进行操作的函数!
[/Quote]
的确是这样 所以一般shell程序里嵌入awk容易 可是awk语句里要用系统命令就不好办了
netxuning 2009-09-15
  • 打赏
  • 举报
回复
看来,awk就是为处理一些格式化的文本文件而设计的,内部没有那些对系统进行操作的函数!
steptodream 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 netxuning 的回复:]
echo ./mydir/sub/sub1 | awk '{system("mkdir -p "$1" ")}'

这个方法可行
[/Quote]
那你就用这个方法和刚才的结合起来就能解决了呀
netxuning 2009-09-15
  • 打赏
  • 举报
回复
echo ./mydir/sub/sub1 | awk '{system("mkdir -p "$1" ")}'

这个方法可行
netxuning 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 songchaoo 的回复:]
rm:
awk -F, '{print $2}' test.txt | xargs rm -rf,
mkdir:
awk -F, '{print $2}' test.txt | xargs mkdir -p,
mv 不太清楚xargs能不能传2个参数,楼主可以试一下
awk -F, '{print $2" "$3}' test.txt | xargs mv,


[/Quote]

对啊,我试试!
songchaoo 2009-09-15
  • 打赏
  • 举报
回复
rm:
awk -F, '{print $2}' test.txt | xargs rm -rf,
mkdir:
awk -F, '{print $2}' test.txt | xargs mkdir -p,
mv 不太清楚xargs能不能传2个参数,楼主可以试一下
awk -F, '{print $2" "$3}' test.txt | xargs mv,

netxuning 2009-09-15
  • 打赏
  • 举报
回复
能提供点思路吗?
steptodream 2009-09-15
  • 打赏
  • 举报
回复
应该可以 不过估计有点麻烦哦
netxuning 2009-09-15
  • 打赏
  • 举报
回复
哦,这个可以,思路我确实没想出来!

不过,有个问题,我在真正运行时要处理的文件非常大,100M左右的CSV文件,
刚才测试了一个20M的,
awk '/'2449169200'/ {print $1}' test.txt
这条语句估计得耗费了进1秒钟时间。
我最初想的是能否在awk组合目录的过程中,直接进行判断目录,建立目录,移动文件的处理!
调用外部的shell命令也行!

23,219

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧