标题: 求助:矩阵转置和文件提取合并问题
[打印本页]
作者: 740011611
时间: 2010-12-7 23:27
标题: 求助:矩阵转置和文件提取合并问题
求助:下面两个问题可以用gawk或者sed解决吗?批处理也行。没搜到相关的帖子...
--------------------
a) 矩阵转置
--------------------
有矩阵如下
1 2 3 4
5 6 7 8
a b c d
e f g h
转换成
1 5 a f
2 6 b f
3 7 c g
4 8 d h
--------------------
b)合并文件
--------------------
一文件如下
1 2 3
4 5 6
7 8 9
另一文件中有
1
3
5
合并成
1 2 3 1
4 5 6 3
7 8 9 5
作者: Hanyeguxing
时间: 2010-12-8 00:00
转换:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in (1.txt) do (
set n=0
for %%b in (%%a) do (
set/a n+=1
for %%c in (!n!) do set #%%c=!#%%c! %%b
))
(for /l %%a in (1,1,%n%) do echo!#%%a!)>3.txt
合并:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in (1.txt) do (
set/a n+=1
set #!n!=%%a
)
(for /f "delims=" %%a in (2.txt) do (
set/a m+=1
for %%b in (!m!) do echo %%a !#%%b!
))>3.txt
也可以:
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt') do set #%%a=%%b
(for /f "tokens=1* delims=:" %%a in ('findstr /n .* 2.txt') do echo %%b !#%%a!)>3.txt
Last edited by Hanyeguxing on 2010-12-8 at 00:20 ]
作者: 740011611
时间: 2010-12-8 00:09
谢谢Hanyeguxing
很好地解决了我的问题
不知道gawk能实现不?
echo %%a!#%%b!好像结果连在一块了echo %%a !#%%b!
呵呵
Last edited by 740011611 on 2010-12-8 at 00:13 ]
作者: Hanyeguxing
时间: 2010-12-8 00:18
没注意到,不好意思
作者: 740011611
时间: 2010-12-8 13:12
nothing 呵呵
想追问一下如果是汉字怎么转置,比如把下面的诗转置?
将进酒—李白
君不见,黄河之水天上来,奔流到海不复回。
君不见,高堂明镜悲白发,朝如青丝暮成雪。
人生得意须尽欢,莫使金樽空对月。
天生我材必有用,千金散尽还复来。
烹羊宰牛且为乐,会须一饮三百杯。
岑夫子,丹丘生,将进酒,杯莫停。
与君歌一曲,请君为我侧耳听:
钟鼓馔玉不足贵,但愿长醉不复醒。
古来圣贤皆寂寞,唯有饮者留其名。
陈王昔时宴平乐,斗酒十千恣欢谑。
主人何为言少钱,径须沽取对君酌。
五花马,千金裘,呼儿将出换美酒,
与尔同销万古愁。
转成
君 . .
不 . .
见 . .
将 黄
进 河
酒 之
| 水
李 天
白 上
来
,
奔
流
到
海
不
复
回
。
Last edited by 740011611 on 2010-12-8 at 13:16 ]
作者: Hanyeguxing
时间: 2010-12-8 14:43
文本要求:不能使用空格,只能使用汉字空白符“ ”前对齐
将进酒—李白
君不见,黄河之水天上来,奔流到海不复回。
君不见,高堂明镜悲白发,朝如青丝暮成雪。
人生得意须尽欢,莫使金樽空对月。
天生我材必有用,千金散尽还复来。
烹羊宰牛且为乐,会须一饮三百杯。
岑夫子,丹丘生,将进酒,杯莫停。
与君歌一曲,请君为我侧耳听:
钟鼓馔玉不足贵,但愿长醉不复醒。
古来圣贤皆寂寞,唯有饮者留其名。
陈王昔时宴平乐,斗酒十千恣欢谑。
主人何为言少钱,径须沽取对君酌。
五花马,千金裘,呼儿将出换美酒,
与尔同销万古愁。
批处理代码:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in (1.txt) do call:han "%%a"
for /l %%a in (1,1,%Ye%) do set Xing= !Xing!
for /f "delims=" %%a in (1.txt) do (
set Han=%%a%Xing%
for /l %%b in (0,1,%Ye%) do set #%%b=!#%%b! !Han:~%%b,1!
)
set/a Ye-=1
(for /l %%a in (0,1,%Ye%) do echo !#%%a!)>3.txt
exit
:han
set Han=%~1
if defined Ye (set Gu=%Ye%) else set Gu=0
:ye
if "!Han:~%Gu%,1!"=="" (
if "%Ye%"=="" set Ye=%Gu%
if %Gu% gtr %Ye% set Ye=%Gu%
goto:eof
)
set/a Gu+=1
goto:ye
if defined Ye (set Gu=%Ye%) else set Gu=0用于加快子循环速度的
for /l %%a in (1,1,%Ye%) do set Xing= !Xing!用于补位,变量为连续的汉字空白符
如果不想空格分隔,则把
set #%%b=!#%%b! !Han:~%%b,1!
改成
set #%%b=!#%%b!!Han:~%%b,1!
如果要从右向左显示,则改成
set #%%b=!Han:~%%b,1! !#%%b!
或
set #%%b=!Han:~%%b,1!!#%%b!
Last edited by Hanyeguxing on 2010-12-8 at 15:23 ]
作者: 740011611
时间: 2010-12-8 17:48
多谢Hanyeguxing!又解决了我的一个问题,想了很长时间没有头绪。
想用gawk却不太熟悉。多谢

作者: ajian
时间: 2010-12-8 19:36
Hanyeguxing真的好厉害啊,好像什么问题都能解决。
作者: sfcctv
时间: 2010-12-8 20:06
Hanyeguxing
你真是太历害了。